package characters

import (
	"fmt"
	"log"
	"sync"
)

var (
	// 全局角色管理器实例
	globalCharacterManager CharacterManager
	initOnce               sync.Once
)

// InitCharacterManager 初始化角色管理器
func InitCharacterManager() error {
	var err error
	initOnce.Do(func() {
		// 创建角色管理器
		globalCharacterManager = NewCharacterManager()
		
		// 注册预定义角色
		predefinedCharacters := GetPredefinedCharacters()
		for _, character := range predefinedCharacters {
			if regErr := globalCharacterManager.RegisterCharacter(character); regErr != nil {
				err = fmt.Errorf("注册角色 %s 失败: %v", character.Name, regErr)
				return
			}
		}
		
		log.Printf("角色管理器初始化完成，共注册 %d 个角色", len(predefinedCharacters))
	})
	
	return err
}

// GetGlobalCharacterManager 获取全局角色管理器
func GetGlobalCharacterManager() CharacterManager {
	if globalCharacterManager == nil {
		log.Println("警告：角色管理器未初始化，正在创建默认实例")
		globalCharacterManager = NewCharacterManager()
	}
	return globalCharacterManager
}

// SetCurrentCharacter 设置当前角色（全局函数）
func SetCurrentCharacter(characterID string) error {
	manager := GetGlobalCharacterManager()
	return manager.SetCurrentCharacter(characterID)
}

// GetCurrentCharacter 获取当前角色（全局函数）
func GetCurrentCharacter() *CharacterPersonality {
	manager := GetGlobalCharacterManager()
	return manager.GetCurrentCharacter()
}

// GetGreeting 获取当前角色的问候语（全局函数）
func GetGreeting() string {
	manager := GetGlobalCharacterManager()
	return manager.GetGreeting()
}

// GetSpecificResponse 获取当前角色的特定类型响应
func GetSpecificResponse(responseType string) string {
	manager := GetGlobalCharacterManager()
	if manager == nil {
		return ""
	}
	return manager.GetSpecificResponse(responseType)
}

// GetResponse 获取当前角色的响应（全局函数）
func GetResponse(responseType string) string {
	manager := GetGlobalCharacterManager()
	return manager.GetResponse(responseType)
}

// GeneratePersonalizedPrompt 生成个性化提示词（全局函数）
func GeneratePersonalizedPrompt(basePrompt string) string {
	manager := GetGlobalCharacterManager()
	return manager.GeneratePersonalizedPrompt(basePrompt)
}

// GetAllCharacters 获取所有角色（全局函数）
func GetAllCharacters() []*CharacterPersonality {
	manager := GetGlobalCharacterManager()
	return manager.GetAllCharacters()
}

// Cleanup 清理资源
func Cleanup() {
	// 目前没有需要清理的资源
	log.Println("角色管理器资源清理完成")
}